package myflags

import (
	"fmt"
	"github.com/sirupsen/logrus"
	"golang.org/x/crypto/ssh/terminal"
	"os"
	"study/server/global"
	"study/server/model/system"
	"study/server/utils/pwd"
)

func InitAdmin() {
	var (
		userName   string
		userPwd    string
		confirmPwd string
	)
	fmt.Println("请输入初始化用户名")
	_, _ = fmt.Scanln(&userName)
	var user system.UserModel
	err := global.DB.First(&user, "user_name = ?", userName).Error
	// 修复1：正确处理数据库查询错误（区分"记录不存在"和真正的查询错误）
	if err == nil {
		logrus.Error("用户已存在，初始化终止") // 改为Error级别并终止
		return                      // 添加return，避免继续执行
	}

	fmt.Println("请输入初始化密码")
	bytePwd, err := terminal.ReadPassword(int(os.Stdin.Fd()))
	if err != nil {
		logrus.Error("密码读取失败:", err) // 改为Error级别
		return                       // 添加return，终止流程
	}
	userPwd = string(bytePwd)

	fmt.Println("请确认初始化密码")
	byteConfirmPwd, err := terminal.ReadPassword(int(os.Stdin.Fd()))
	if err != nil {
		logrus.Error("确认密码读取失败:", err)
		return
	}
	confirmPwd = string(byteConfirmPwd)

	// 修改2：密码不一致时终止流程
	if userPwd != confirmPwd {
		logrus.Error("两次密码不一致，初始化终止")
		return // 添加return，避免继续执行创建操作
	}

	hashPwd, err := pwd.GenerateHash(userPwd)
	if err != nil {
		logrus.Error("密码加密失败:", err)
		return
	}

	// 修改3：处理Create操作的错误返回值
	err = global.DB.Create(&system.UserModel{
		UserName:     userName,
		UserPassword: hashPwd,
		IsAdmin:      true,
	}).Error
	if err != nil {
		logrus.Error("管理员创建失败:", err) // 捕获并显示数据库错误
		return
	}

	logrus.Info("管理员初始化成功,用户名:", userName, "请妥善保存")
}
